package com.example.smartall.ui.base;

import android.content.Intent;
import android.os.Bundle;
import android.os.Looper;
import android.widget.Toast;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import com.example.smartall.ui.HomeActivity;

import java.util.ArrayList;
import java.util.List;

/**
 * Activity 基类 用于扩展activity相同方法
 */
public abstract class BaseActivity extends AppCompatActivity {

    //存储所有已启动的活动
    private static List<BaseActivity> activities = new ArrayList<>();

    //用于显示一个提示信息
    public void showToast(String tip){
        Toast.makeText(this,tip,Toast.LENGTH_SHORT).show();
    }

    //注意 使用Looper后线程将直接被结束 ，调用此方法应在线程最终位置 我坑我自己
    public void showToastSync(String tip){
        Looper.prepare();
        Toast.makeText(this,tip,Toast.LENGTH_SHORT).show();
        Looper.loop();
    }

    //跳转到其他活动 适用于无参跳转
    public void migrateTo(Class clazz){
        startActivity(new Intent(this,clazz));
    }

    //退出当前activity 2/12
    public void destroyThis(){
        this.finish();
    }

    //这方法有那 (String)"abc" 的意思了 有这方法就不需要写 类名.this 这么麻烦
    public BaseActivity getThis(){
        return this;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        //加入活动队列
        activities.add(this);
        super.onCreate(savedInstanceState);
    }

    @Override
    protected void onDestroy() {
        //从活动队列移除
        activities.remove(this);
        super.onDestroy();
    }

     /**
      * @Author:         abbas
      * @CreateDate:     2022/1/31
      * @Description:    java.lang.IllegalArgumentException: You cannot start a load for a destroyed activity
      *                  这个是满足门诊模块的最后一句话 ： 点击预约成功返回首页。
      *                  当然呢，可以直接startActivity 因为要求没有说要结束这些活动
      */
     //销毁处于最低栈活动上面的活动 可以理解为调用此方法即跳主页
    public void destroyLater(){
        //尝试直接销毁其他活动 然后启动主页后，然后再销毁当前activity，但是报错了
//        for (BaseActivity activities:activities) {
//            activities.finish();
//        }
        for (int i = activities.size() ; i > 1 ; --i){
            activities.get(i-1).finish();
        }
    }

    public abstract void init();

    public abstract void initEvent();

}
